package com.kerrykidz.membership.dao.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.kerrykidz.filemanagement.dao.model.HisCarCareEntity;
import com.kerrykidz.filemanagement.vo.CrmVO;
import com.kerrykidz.membership.dao.model.CusMemEntity;
import com.kerrykidz.workflow.vo.SearchParamVo;
import com.rdp.framework.core.dao.mapper.MyBatisSuperMapper;
import com.rdp.framework.exception.RDPException;

@Repository
public interface CusMemEntityMapper extends MyBatisSuperMapper<CusMemEntity> {

	/**
	 * 根据会员ID查询会员及其兄弟姐妹
	 * 
	 * @param memberId
	 *            会员编号
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberAndSiblingsById(@Param("memberId") String memberId) throws RDPException;
	
	/**
	 * 根据会员姓名 查询 会员
	 * 
	 * @param memName
	 *            会员姓名
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByMemName(@Param("memName") String memName) throws RDPException;
	
	/**
	 * 根据会员ID查询会员及其兄弟姐妹(现场)
	 * 
	 * @param memberId
	 *            会员编号
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findSiteMemberAndSiblingsById(@Param("memberId") String memberId) throws RDPException;

	/**
	 * 根据会员姓名模糊查询会员信息
	 * 
	 * @param name
	 *            会员姓名
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByName(@Param("name") String name) throws RDPException;

	/**
	 * 根据监护人电话号码查询所属会员信息
	 * 
	 * @param telnum
	 *            监护人电话号码
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByTel(@Param("telnum") String telnum) throws RDPException;
	
	/**
	 * 根据会员姓名模糊查询会员信息(现场)
	 * 
	 * @param name
	 *            会员姓名
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findSiteMemberByName(@Param("name") String name, @Param("fkBranId") String fkBranId) throws RDPException;

	/**
	 * 根据监护人电话号码查询所属会员信息(现场)
	 * 
	 * @param telnum
	 *            监护人电话号码
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findSiteMemberByTel(@Param("telnum") String telnum, @Param("fkBranId") String fkBranId) throws RDPException;

	/**
	 * 取得会员玩伴券
	 * 
	 * @param memberId
	 *            会员编号
	 * @return
	 * @throws RDPException
	 */
	public List<Map<String, Object>> findVoucherCouponsByMemberId(@Param("memberId") String memberId) throws RDPException;

	/**
	 * 获取访客信息
	 * 
	 * @param condition
	 *            :姓名||电话||邮箱
	 * @param relatedSales
	 *            :关联销售
	 * @return List<Map<String,Object>>
	 * @throws RDPException
	 */
	public List<Map<String, Object>> listVisitors(@Param("condition") String condition, @Param("relatedSales") String relatedSales)
			throws RDPException;

	/**
	 * 
	 * @Description 根据监护人id获取小孩信息
	 * @param guaId
	 * @return
	 * @author QUINN
	 * @date 2014年8月19日上午10:20:17
	 */
	public List<CusMemEntity> findByGua(@Param("guaId") String guaId);
	
	/**
	 * 
	 * @Description 根据会员号获取客服历史
	 * @param guaId
	 * @return
	 * @author QUINN
	 * @date 2014年8月19日上午10:20:17
	 */
	public List<HisCarCareEntity> getCarFormHisList(@Param("memberIdList") List<String> memberIdList);
	
	/**
	 * 查询会员活跃度
	 * @param vo
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月9日
	 */
	public List<CrmVO> findLiveness(CrmVO vo) throws RDPException;
	
	/**
	 * 查询黑名单信息
	 * @param vo
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月4日
	 */
	public List<CrmVO> findBlackList(CrmVO vo) throws RDPException;
	
	/**
	 * 查询VIP信息
	 * @param vo
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月4日
	 */
	public List<CrmVO> findVip(CrmVO vo) throws RDPException;
	
	/**
	 * 查询VIP信息
	 * @param vo
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月4日
	 */
	public List<CrmVO> findCusTotal(CrmVO vo) throws RDPException;
	
	/**
	 * 
	 * @Description 销售关联会员信息
	 * @param 
	 * @return
	 * @author 
	 * @date 2014年9月4日上午10:20:17
	 */
	
	public List<CusMemEntity> findBySaleName(CusMemEntity entity) throws RDPException;
	
	/**
	 * 根据会员姓名模糊查询会员信息（现场销售）
	 * 
	 * @param name
	 *            会员姓名
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByNameAndSale(@Param("name") String name, @Param("userId") String userId, @Param("fkBranId") String fkBranId) throws RDPException;

	/**
	 * 根据监护人电话号码查询所属会员信息（现场销售）
	 * 
	 * @param telnum
	 *            监护人电话号码
	 * @return
	 * @throws RDPException
	 */
	public List<CusMemEntity> findMemberByTelAndSale(@Param("telnum") String telnum, @Param("userId") String userId, @Param("fkBranId") String fkBranId) throws RDPException;
	
	/**
	 * 首页 - 即将到期的会员
	 * @param fkSales :销售人员
	 * @param fkBranId：部门编号
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public List<CusMemEntity> indexEndMem(SearchParamVo searchParam)throws RDPException;
	
	/**
	 * 首页 - 近期生日会员
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public List<CusMemEntity> indexBirthdayMem(SearchParamVo searchParam)throws RDPException;
	
	/**
	 * 会员失效
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateInvalidMemberByQuartz() throws RDPException;
	
	/**
	 * 会员取消停卡
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateStopcardMemberByQuartz() throws RDPException;
	
	/**
	 * 会员变为停卡
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateMemberToStopcardByQuartz() throws RDPException;
	
	/**
	 * 会员、非会员过期余额清0
	 * @throws RDPException
	 * @date: 2014年9月25日
	 */
	public void updateExpireStoredByQuartz() throws RDPException;
	
	/**
	 * 查找退会的会员信息
	 * @param memberId
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月29日
	 */
	public CusMemEntity findRetreatMember(@Param("memberId") String memberId) throws RDPException;
	
	/**
	 * 根据会员编号查询会员信息(含续会，含出场)
	 * @param memberId
	 * @return
	 * @throws RDPException
	 * @date: 2014年9月29日
	 */
	public CusMemEntity findMemberById(@Param("memberId") String memberId) throws RDPException;
}